package org.xx.armory.service;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 标记方法，具有此标记的方法在执行前需要通过签名参数验证参数的完整性。
 */
@Target(value = METHOD)
@Retention(value = RUNTIME)
@Documented
public @interface WithSignature {
    /**
     * 标记需要参与验证的参数名及顺序，<strong>如果是空数组则表示所有参数都参与验证</strong>。
     *
     * @return 需要参与验证的参数名及顺序。
     */
    String[] paramNames() default {};

    /**
     * 标记包含了签名的参数名。
     *
     * @return 包含了签名的参数名。
     */
    String signatureName() default "signature";
}
